`:top
`!XML-RPC`! est un protocole RPC (`*`F33f`_`[remote procedure call`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Remote_procedure_call]`_`f`*), une spécification simple et un ensemble de codes qui permettent à des processus s'exécutant dans des environnements différents de faire des appels de méthodes à travers un réseau.
Ce protocole a été élaboré et publié dans sa première version en `F33f`_`[1998`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=1998]`_`f par Dave Winer, travaillant pour UserLand Software`:cite-ref-1[`F5bf`_`[1`#cite-note-1]`_`f], en collaboration avec `F33f`_`[Microsoft`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft]`_`f`:cite-ref-2[`F5bf`_`[2`#cite-note-2]`_`f].
XML-RPC permet d'appeler une fonction sur un serveur distant à partir de n'importe quel système (`F33f`_`[Windows`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft_Windows]`_`f, `F33f`_`[Mac OS X`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=MacOS]`_`f, GNU/Linux) et avec n'importe quel `F33f`_`[langage de programmation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation]`_`f. Le serveur est lui-même sur n'importe quel système et est programmé dans n'importe quel langage.
Cela permet de fournir un `F33f`_`[service web`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Service_web]`_`f utilisable par tout le monde sans restriction de système ou de langage.
Les processus d'invocation à distance utilisent le protocole `F33f`_`[HTTP`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=HTTP]`_`f pour le transfert des `F33f`_`[données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Donnée_(informatique)]`_`f et la norme `F33f`_`[XML`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Extensible_Markup_Language]`_`f pour la structuration des `F33f`_`[données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Donnée_(informatique)]`_`f.
XML-RPC est conçu pour permettre à des `F33f`_`[structures de données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Structures_de_données]`_`f complexes d'être transmises, exécutées et renvoyées très facilement.
XML-RPC est une alternative aux `F33f`_`[services web WS-*`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Service_web]`_`f, dont `F33f`_`[SOAP`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=SOAP]`_`f.
>>Contents
• `F0af`_`[Usage [ 3 `#usage-3]`_`f
• `F0af`_`[Exemple`#exemple]`_`f
• `F0af`_`[Types de données`#types-de-donn-es]`_`f
• `F0af`_`[Critiques`#critiques]`_`f
• `F0af`_`[Références`#r-f-rences]`_`f
• `F0af`_`[Liens externes`#liens-externes]`_`f
-─
>>Usage [ 3 ]
Pour effectuer un appel XML-RPC, un client doit effectuer une `F33f`_`[requête POST`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Hypertext_Transfer_Protocol]`_`f de type `*text/xml`* avec un corps qui précise la méthode distante invoquée, et, s'il y en a, les paramètres à passer à cette méthode.
Le serveur XML-RPC doit renvoyer une réponse avec le code `F33f`_`["200 OK"`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Liste_des_codes_HTTP]`_`f, le type `*text/xml`*, et un corps qui peut contenir un unique paramètre. En cas d'erreur le corps peut à la place contenir une description de l'erreur. Une erreur est représentée par un code d'erreur sous forme d'un entier, et d'un `F33f`_`[message d'erreur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Message_d'erreur]`_`f sous forme de `F33f`_`[chaîne de caractères`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Chaîne_de_caractères]`_`f.
>>Exemple
Imaginons un serveur xml-rpc qui comporterait une méthode `*genereUnMessageDeSalutation`* qui prend comme paramètre un nom et qui retour un message de salutation en conséquence. Une requête pour invoquer cette méthode aurait le corps
`B100`F9d9<?xml version="1.0"?>`f`b
`B100`F9d9<methodCall>`f`b
`B100`F9d9 <methodName>genereUnMessageDeSalutation</methodName>`f`b
`B100`F9d9 <params>`f`b
`B100`F9d9 <param>`f`b
`B100`F9d9 <value><string>Paul</string></value>`f`b
`B100`F9d9 </param>`f`b
`B100`F9d9 </params>`f`b
`B100`F9d9</methodCall>`f`b
et la réponse ressemblerait à
`B100`F9d9<?xml version="1.0"?>`f`b
`B100`F9d9<methodResponse>`f`b
`B100`F9d9 <params>`f`b
`B100`F9d9 <param>`f`b
`B100`F9d9 <value><string>Bonjour Paul</string></value>`f`b
`B100`F9d9 </param>`f`b
`B100`F9d9 </params>`f`b
`B100`F9d9</methodResponse>`f`b
>>Types de données
Les types de données qui existent dans la spécification xml-rpc sont :
`t
| Nom | Exemple | Commentaire |
|---|---|---|
| Entier | <i4> -666 </i4> ou <int> -666 </int> | Entier signé sur 4 bytes |
| Booléen | <boolean> 0 </boolean> ou <boolean> 1 </boolean> | 0 représente l'état "faux", 1 représente l'état "vrai" |
| Chaîne de caractères | <string> Toto </string> | |
| Nombre à virgule | <double> -13.12 </double> | double signé |
| Date et heure | <dateTime.iso8601> 2025-04-13T20:06:52 </dateTime.iso8601> | Date et heure au format ISO 8601 |
| Données binaires | <base64> dW4gdGV4dGUgc2FucyBpbnTDqXLDqnQ= </base64> | Donées binaires encodées en base64 |
| Structure de données | <struct> <member> <name> nom </name> <value><string> Toto </string></value> </member> <member> <name> age </name> <value><i4> 18 </i4></value> </member> </struct> | Chaque membre de la structure de données a un nom et une valeur. Un membre peut être de n'importe quel type. Il peut aussi être lui même une structure de données |
| Tableau | <array> <data> <value><string> Toto </string></value> <value><i4> 18 </i4></value> </data> </array> | Les types de valeur du tableau peuvent de n'importe quel type et peuvent être hétérogènes |
`t
Une extension de la spécification introduit le type de données `*<nil />`* qui permet de représenter une absence de valeur`:cite-ref-4[`F5bf`_`[4`#cite-note-4]`_`f]. Il n'est toutefois pas garanti qu'un serveur XML-RPC accepte ce type de données sur tous ses champs.
Par ailleurs, bien que ne faisant pas partie de la spécification, certaines implémentations acceptent le type de données `*<i8>`* pour représenter les entiers signés codés sur 8 bytes`:cite-ref-5[`F5bf`_`[5`#cite-note-5]`_`f]`:cite-ref-6[`F5bf`_`[6`#cite-note-6]`_`f].
>>Critiques
Des critiques à l'encontre de XLM-RPC font valoir qu'il n'a qu'une faible valeur ajoutée par rapport à du simple XML ou par rapport à une API `F33f`_`[Rest`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Representational_state_transfer]`_`f. Notamment une requête XML-RPC est environ 4 fois plus grosse qu'une requête en simple XML qui encoderait les mêmes objets`:cite-ref-7[`F5bf`_`[7`#cite-note-7]`_`f]`:cite-ref-8[`F5bf`_`[8`#cite-note-8]`_`f]`:cite-ref-9[`F5bf`_`[9`#cite-note-9]`_`f].
>>Références
`:cite-note-1`!1.`! `F0af`_`[↑`#cite-ref-1]`_`f `:winer1999`a`:dave-winer1999`a(en) Dave Winer, « Home », 14 juin 1999 (consulté le 25 mai 2024)
`:cite-note-2`!2.`! `F0af`_`[↑`#cite-ref-2]`_`f `:winer14-07-1998`a`:dave-winer14-07-1998`a(en) Dave Winer, « XML-RPC for Newbies », 14/07.1998 (consulté le 25 mai 2014)
`:cite-note-3`!1.`! (en) « XML-RPC Specification » (consulté le 13 avril 2025)
`:cite-note-4`!4.`! `F0af`_`[↑`#cite-ref-4]`_`f (en) « XML-RPC Extensions » (consulté le 13 avril 2025)
`:cite-note-5`!5.`! `F0af`_`[↑`#cite-ref-5]`_`f (en) « RPC::XML - A set of classes for core data, message and XML handling - metacpan.org » (consulté le 13 avril 2025)
`:cite-note-6`!6.`! `F0af`_`[↑`#cite-ref-6]`_`f (en) « User manual for XML-RPC For C/C++ » (consulté le 13 avril 2025)
`:cite-note-7`!7.`! `F0af`_`[↑`#cite-ref-7]`_`f (en) « What is the benefit of XML-RPC over plain XML? » (consulté le 14 avril 2025)
`:cite-note-8`!8.`! `F0af`_`[↑`#cite-ref-8]`_`f (en) « "An open poll on the merits of XmlRpc versus alternatives » (consulté le 14 avril 2025)
`:cite-note-9`!9.`! `F0af`_`[↑`#cite-ref-9]`_`f (en) « If you have REST, why XML-RPC? » (consulté le 14 avril 2025)
>>Liens externes
• (en) XML-RPC Home Page, spécification et également implémentations dans divers langages
• (en) XML-RPC Home page de 1998, conservée par Dave Winer
• (en) Rebooting XML-RPC, évolution de XML-RPC par son créateur Dave Winer
• (en) Scripting/xml-rpc sur GIthub, la version `F33f`_`[Javascript`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=JavaScript]`_`f de "Rebooting XML-RPC" par Dave Winer
• Documentation avec exemples d'`F33f`_`[implémentation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Implémentation]`_`f en plusieurs langages : http://www.tldp.org/HOWTO/XML-RPC-HOWTO/index.html
• Portail de l’informatique
`c`F0af`_`[↑ Back to top`#top]`_`f`a